php网页抓取图片(Python爬虫()实战之爬取())

优采云 发布时间: 2022-01-23 21:13

  php网页抓取图片(Python爬虫()实战之爬取())

  之前的传送门:

  小白学Python爬虫(1):开

  小白学Python爬虫(2):前期准备(一)基础类库安装)

  小白学Python爬虫(3):前期准备(二)Linux基础介绍)

  小白学习Python爬虫(4):前期准备(三)Docker基础介绍)

  小白学Python爬虫(5):前期准备(四)数据库基础)

  小白学习Python爬虫(6):前期准备(五)爬虫框架的安装)

  小白学习Python爬虫(7):HTTP基础

  小白学Python爬虫(8):网页基础

  小白学习Python爬虫(9):爬虫基础

  小白学习Python爬虫(一0):Session和Cookies

  小白学Python爬虫(一1):urllib的基本使用(一)

  小白学习Python爬虫(一2):urllib的基本使用(二)

  小白学Python爬虫(一3):urllib的基本使用(三)

  小白学习Python爬虫(14):urllib(四))的基本使用

  小白学习Python爬虫(一5):urllib的基本使用(五)

  小白学Python爬虫(一6):urllib实战爬虫图)

  小白学习Python爬虫(一7):Requests的基本使用)

  小白学Python爬虫(18):请求高级操作

  小白学Python爬虫(一9):Xpath基础操作

  小白学Python爬虫(20):Xpath进阶

  小白学Python爬虫(二1):分析库美汤(上))

  小白学Python爬虫(二2):分析库美汤(下))

  小白学Python爬虫(二3):解析库pyquery简介

  小白学Python爬虫(24):2019豆瓣电影排行榜

  介绍

  上一篇实战最后没有使用页面元素分析,感觉有点遗憾,不过最后的片单还是挺香的,真心推荐。

  

  本次选题是先写代码再写文章,肯定可以用于页面元素分析,还需要对网站的数据加载有一定的分析,才能得到最终数据,和小编找到的两个数据源没有IP访问限制,质量有保障。绝对是小白修炼的绝佳选择。

  郑重声明:本文仅供学习及其他用途。

  分析

  首先,要爬取*敏*感*词*,首先要知道有哪些股票。在这里,小编发现了一个网站,而这个网站有一个股票代码列表:.

  

  打开Chrome的开发者模式,一一选择代码。具体过程这里就不贴了,同学们可以自己实现。

  我们可以将所有股票代码存储在一个列表中,剩下的就是找到一个网站,然后循环获取每只股票的数据。

  这个网站编辑器已经找到了,是同花顺,链接:。

  

  聪明的同学一定都发现,这个链接里的000001就是股票代码。

  接下来,我们只需要拼接这个链接,就可以不断得到我们想要的数据。

  实战

  首先介绍一下本次实战用到的请求库和解析库:Requests和pyquery。数据存储终于落地Mysql。

  获取股票代码列表

  第一步当然是建立一个股票代码列表。我们先定义一个方法:

  def get_stock_list(stockListURL):

r =requests.get(stockListURL, headers = headers)

doc = PyQuery(r.text)

list = []

# 获取所有 section 中 a 节点,并进行迭代

for i in doc('.stockTable a').items():

try:

href = i.attr.href

list.append(re.findall(r"\d{6}", href)[0])

except:

continue

list = [item.lower() for item in list] # 将爬取信息转换小写

return list

  把上面的链接作为参数传入,大家可以自己运行看看结果,小编这里就不贴结果了,有点长。. .

  获取详细数据

  详细信息的数据似乎在页面上,但实际上并不存在。最终获取数据的实际地方不是页面,而是数据接口。

  http://qd.10jqka.com.cn/quote.php?cate=real&type=stock&callback=showStockDate&return=json&code=000001

  至于怎么找,小编这次就不多说了。还是希望所有想学爬虫的同学都能自己动手,去找找吧。多找几遍,自然会找到路。

  既然有了数据接口,我们再来看看返回的数据:

  showStockDate({"info":{"000001":{"name":"\u5e73\u5b89\u94f6\u884c"}},"data":{"000001":{"10":"16.13","8":"16.14","9":"15.87","13":"78795234.00","19":"1262802470.00","7":"16.12","15":"40225508.00","14":"37528826.00","69":"17.73","70":"14.51","12":"5","17":"945400.00","264648":"0.010","199112":"0.062","1968584":"0.406","2034120":"9.939","1378761":"16.026","526792":"1.675","395720":"-948073.000","461256":"-39.763","3475914":"313014790000.000","1771976":"1.100","6":"16.12","11":""}}})

  显然,这个结果并不是标准的json数据,而是JSONP返回的标准格式数据。这里我们先对head和tail进行处理,变成标准的json数据,然后针对本页的数据进行解析,最后将解析后的值写入数据库。

  def getStockInfo(list, stockInfoURL):

count = 0

for stock in list:

try:

url = stockInfoURL + stock

r = requests.get(url, headers=headers)

# 将获取到的数据封装进字典

dict1 = json.loads(r.text[14: int(len(r.text)) - 1])

print(dict1)

# 获取字典中的数据构建写入数据模版

insert_data = {

"code": stock,

"name": dict1['info'][stock]['name'],

"jinkai": dict1['data'][stock]['7'],

"chengjiaoliang": dict1['data'][stock]['13'],

"zhenfu": dict1['data'][stock]['526792'],

"zuigao": dict1['data'][stock]['8'],

"chengjiaoe": dict1['data'][stock]['19'],

"huanshou": dict1['data'][stock]['1968584'],

"zuidi": dict1['data'][stock]['9'],

"zuoshou": dict1['data'][stock]['6'],

"liutongshizhi": dict1['data'][stock]['3475914']

}

cursor.execute(sql_insert, insert_data)

conn.commit()

print(stock, ':写入完成')

except:

print('写入异常')

# 遇到错误继续循环

continue

  这里我们添加异常处理,因为这次爬取的数据很多,很可能会因为某种原因抛出异常。当然,我们不想在出现异常的时候中断数据采集,所以在这里添加异常处理,继续采集数据。

  完整代码

  我们将代码稍微封装一下来完成这个实战。

  import requests

import re

import json

from pyquery import PyQuery

import pymysql

# 数据库连接

def connect():

conn = pymysql.connect(host='localhost',

port=3306,

user='root',

password='password',

database='test',

charset='utf8mb4')

# 获取操作游标

cursor = conn.cursor()

return {"conn": conn, "cursor": cursor}

connection = connect()

conn, cursor = connection['conn'], connection['cursor']

sql_insert = "insert into stock(code, name, jinkai, chengjiaoliang, zhenfu, zuigao, chengjiaoe, huanshou, zuidi, zuoshou, liutongshizhi, create_date) values (%(code)s, %(name)s, %(jinkai)s, %(chengjiaoliang)s, %(zhenfu)s, %(zuigao)s, %(chengjiaoe)s, %(huanshou)s, %(zuidi)s, %(zuoshou)s, %(liutongshizhi)s, now())"

headers = {

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'

}

def get_stock_list(stockListURL):

r =requests.get(stockListURL, headers = headers)

doc = PyQuery(r.text)

list = []

# 获取所有 section 中 a 节点,并进行迭代

for i in doc('.stockTable a').items():

try:

href = i.attr.href

list.append(re.findall(r"\d{6}", href)[0])

except:

continue

list = [item.lower() for item in list] # 将爬取信息转换小写

return list

def getStockInfo(list, stockInfoURL):

count = 0

for stock in list:

try:

url = stockInfoURL + stock

r = requests.get(url, headers=headers)

# 将获取到的数据封装进字典

dict1 = json.loads(r.text[14: int(len(r.text)) - 1])

print(dict1)

# 获取字典中的数据构建写入数据模版

insert_data = {

"code": stock,

"name": dict1['info'][stock]['name'],

"jinkai": dict1['data'][stock]['7'],

"chengjiaoliang": dict1['data'][stock]['13'],

"zhenfu": dict1['data'][stock]['526792'],

"zuigao": dict1['data'][stock]['8'],

"chengjiaoe": dict1['data'][stock]['19'],

"huanshou": dict1['data'][stock]['1968584'],

"zuidi": dict1['data'][stock]['9'],

"zuoshou": dict1['data'][stock]['6'],

"liutongshizhi": dict1['data'][stock]['3475914']

}

cursor.execute(sql_insert, insert_data)

conn.commit()

print(stock, ':写入完成')

except:

print('写入异常')

# 遇到错误继续循环

continue

def main():

stock_list_url = 'https://hq.gucheng.com/gpdmylb.html'

stock_info_url = 'http://qd.10jqka.com.cn/quote.php?cate=real&type=stock&callback=showStockDate&return=json&code='

list = get_stock_list(stock_list_url)

# list = ['601766']

getStockInfo(list, stock_info_url)

if __name__ == '__main__':

main()

  成就

  最终,编辑器用了15分钟左右,成功捕获了4600+条数据,结果就不显示了。

  示例代码

  为了您的方便,本系列中的所有代码编辑器都将放在代码管理存储库 Github 和 Gitee 上。

  示例代码 - Github

  示例代码 - Gitee

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线