免费获取:python获取今日头条搜索信息_python 爬取今日头条关键词搜索
优采云 发布时间: 2022-11-26 18:26免费获取:python获取今日头条搜索信息_python 爬取今日头条关键词搜索
使用 Python 获取今日头条新闻的关键词文章
使用进程池
代码如下:# -*-
编码: utf-8 -*-
导入请求
导入随机
导入请求
导入 JSON
导入时间
导入哈希库
从utils.img_to_tencent导入img_to_tencent
def md5(str):
return hashlib.md5(str.encode('utf-8')).hexdigest()
PC_UAS = [
'Mozilla/5.0 (Windows NT 10.0;赢64;x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36'
'Mozilla/5.0 (Macintosh;Intel Mac OS X 10_9_1) AppleWebKit/537.73.11 (KHTML, like Gecko) Version/7.0.1 Safari/537.73.11',
'Mozilla/5.0 (Windows NT 6.1;WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.76 Safari/537.36',
'Mozilla/5.0 (Windows NT 6.1;哇64;rv:26.0) 壁虎/20100101火狐/26.0',
'Mozilla/5.0 (Windows NT 6.1;WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537.36',
'Mozilla/5.0 (Macintosh;Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36',
'Mozilla/5.0 (Macintosh;Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537.36',
'Mozilla/5.0 (Windows NT 6.1;WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.102 Safari/537.36',
'Mozilla/5.0 (Macintosh;Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.102 Safari/537.36',
'Mozilla/5.0 (Macintosh;英特尔 Mac OS X 10.9;rv:26.0) 壁虎/20100101火狐/26.0',
'Mozilla/5.0 (X11;乌班图;Linux x86_64;rv:26.0) 壁虎/20100101火狐/26.0',
'Mozilla/5.0 (Windows NT 6.1; rv:26.0) Gecko/20100101 Firefox/26.0',
'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.76 Safari/537.36'
]
定义 crawl_baidu(单词):
pc_headers = {
'User-Agent': random.sample(PC_UAS, 1)[0],'Accept': 'text/html,application/
xhtml+xml,application/xml; q=0.9,*/*; q=0.8',
“接受编码”: “gzip, deflate, br”,
“缓存控制”: “无缓存”,
“杂注”: “无缓存”,
“秒获取模式”:“导航”,
“秒取站点”:“同源”,
“秒获取用户”: “?1”,
“升级不安全请求”:“1”,
“接受 - 语言”: “zh - 中文, zh;q = 0.9“,
“饼干”: “tt_webid=67285902;WEATHER_CITY=%E5%8C%97%E4%BA%AC;tt_webid=67285902;UM_distinctid=16bc9db8a29f6-0417349b599406-516d3e71-13c680-16bc9db8a2d85;csrftoken=5eb2a0e00bcbb888f417ef261ee5269a;CNZZDATA1259612802=176456487-https%253A%252F%252F%252F%7C1562461887;s_v_web_id=ddb620b1224506f21ba99de20d4169e3;__tasessionId=ned”
“4T635K09”
}
结果 = []
对于范围 (0,3) 中的 i:
" />
页 = I * 20
html_text = ''
新闻= ''
对于范围 (3) 中的 J:
网址 = “” \
“&count=20&cur_tab=1”%(int(page),word)
尝试:代理 = { 'https': '*********8*****8','http': '*******8**8**
8****8'}
resp = requests.get(url, headers=pc_headers, proxies=proxies,timeout=20)
睡眠时间(0.5)
html_text = 文本
resp.keep_alive = 假
关闭()
data = json.loads(html_text)
新闻 = 数据[“数据”]
如果不是新闻:
继续
还:
通过
例外情况除外:
打印(e)
睡眠时间(0.1)
继续
破
如果新闻:
data = json.loads(html_text)
新闻 = 数据[“数据”]
对于我在新闻中:
尝试:
data_title = i['title']
real_url = i['url']data_showtime = i['display']['info']
['time_factor']author_name = i['display']['info']
['site_name']author_imgs = i['display']['info']
['icon_img']
如果不author_imgs:
author_imgs = ''data_imgs = i['display']['info']
['images']
如果data_imgs:
data_imgs = data_imgs[0]
img_to_tencent(data_imgs)
还:
data_imgs = ''data_content = i['display']['summary']
['text']
除了:
通过
" />
还:
img_to_tencent(author_imgs)
如果 data_title 中的“ä”或 (data_content) 中的“ä”:
通过
还:
打印(real_url、data_title、data_imgs、data_content、data_showtime、author_name、author_imgs、单词)
mysql_config = {“主机”: “*****888888”,
“端口”: *****6,
“用户”: “根”,
“passwd”: “***88”,
“db”: “**********”,
“字符集”: “UTF8”}
conn = MySQLdb.connect(**mysql_config)
cursor = conn.cursor()
target_url_md5 = md5(real_url)
cursor.execute(“从crawl_result中选择source_keywords,其中 target_url_md5=%s”,
(target_url_md5,))
dat = cursor.fetchone()
如果 dat:
source_keywords = dat[0]
如果单词不在 source_keywords.strip().split(“,”) 中:
source_keywords += “,%s” % 字数
source_keywords = ','.join(list(set(source_keywords.split(“,”))))
cursor.execute(“update crawl_result set source_keywords=%s where target_url_md5=%s”,
(source_keywords,target_url_md5))
mit()
打印('OK1111')
还:
如果data_content:
cursor = conn.cursor()
cursor.execute(
“插入crawl_result(target_url,target_url_md5,addtime,data_title,data_imgs,data_content,data_showtime,data_json,源,source_keywords,状态,author_name,author_ imgs,author_id,author_json) ”“值(%s,%s,%s,%s,%s,%s,%s,
%s)”,
(real_url, target_url_md5, int(time.time()), data_title, data_imgs, data_content,
data_showtime,'', 6, 单词, 0, author_name, author_imgs, '', ''))
mit()
打印('确定')
如果__name__ == '__main__':
从多处理.虚拟导入池
池 = 池(20)
# kws_list = ['化妆水']。
pool.map(crawl_baidu, kws_list)
cursor.close()
Conn.close()
原文链接:
教程:Python 批量获取今日头条街拍美图
大家好,在上一篇文章中我们学习了Ajax的数据采集,本文我们以今日头条为例,通过分析Ajax的请求抓取今日头条的街头照片,并将图片下载到本地保存。
准备好了,让我们开始吧!喜欢记得采集
,喜欢,关注。
注:完整的代码、数据、技术交流,在文末提供
网站分析
在抓取之前,请先分析抓取的逻辑。打开今日头条美图公司%E8%A1%97%E6%8B%8D的街头照片,如下图所示:
我们点击第一个,这个请求的URL是:
然后我们打开开发者工具,切换到网络选项卡,再次刷新页面滑动,可以发现这里有很多条目,点击以'search?keyword=%'开头的条目,可以发现有很多图片信息数据,其中img_small_url,img_url是图片链接, 如下图所示:
我们只需要使用 Python 来模拟这个 Ajax 请求,然后提取相关的美女链接并下载即可,但在此之前,我们需要分析 URL 模式。
切换回“标头”选项卡并观察其请求 URL 和标头信息,如下所示
如您所见,这是一个 GET 请求,请求 URL 的参数是关键字、pd、dvpf、aid、page_num、search_json、rawJSON 和 search_id。我们需要找到这些参数的规则,以便我们可以轻松地以编程方式构造它们。
接下来,滑动页面以加载一些新结果。在加载的同时,您可以看到网络中出现了许多 Ajax 请求。如下图所示:
观察参数
在后续的链接中,可以发现更改的参数仅page_num,其他参数没有更改,page_num的偏移量为 1,因此我们可以使用page_num参数来控制数据分页,这样我们就可以通过接口批量获取数据,然后解析数据并下载图片。
实战
定义一个 get_page() 方法,该方法实现加载单个 Ajax 请求的结果。唯一更改的参数是 page_num,因此我们将它作为参数传递,实现代码如下:
def get_page(page_num):
global headers
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36',
<p>
" />
}
params = {
'keyword':urllib.parse.unquote('%E8%A1%97%E6%8B%8D'),
'pd':'atlas',
'dvpf':'pc',
'aid':4916,
'page_num':page_num,
'search_json':'%7B%22from_search_id%22%3A%22202106100003510102121720341003A4ED%22%2C%22origin_keyword%22%3A%22%E8%A1%97%E6%8B%8D%22%2C%22image_keyword%22%3A%22%E8%A1%97%E6%8B%8D%22%7D',
'rawJSON': 1,
'search_id':'202106100004290101500200495C05B763'
}
url='https://so.toutiao.com/search?'+urlencode(params)
try:
response=requests.get(url,headers=headers,params=params)
if response.status_code==200:
return response.json()
except requests.ConnectionError:
return None
</p>
这里我们使用 urlencode() 方法构造请求的 GET 参数,然后用请求请求这个链接,如果返回状态码为 200,则调用 json() 响应方法将结果转换为 JSON 格式,然后返回。
接下来,实现
解析方法:提取每条数据的img_url字段的 image 链接,并返回 image 链接,此时我们通过构造函数实现,实现代码如下:
def get_images(json):
images=json.get('rawData').get('data')
<p>
" />
for image in images:
link = image.get('img_url')
yield link
</p>
接下来,实现一个方法saving_images()来保存图片,其中link是上一个get_images()方法返回的图片链接,实现代码如下:
def saving_img(link):
global name
print(f'-------正在打印第{name}张图片')
data=requests.get(link,headers=headers).content
with open(f'image1/{name}.jpg','wb')as f:
f.write(data)
name+=1
最后,你只需要构造一个page_num数组,遍历page_num,提取图片链接,下载即可,具体代码如下:
def main(paga_num):
json=get_page(paga_num)
for link in get_images(json):
saving_img(link)
if __name__ == '__main__':
for i in range(0,2):
main(i)
这样,整个程序就完成了,运行后,你可以发现街照美图被保存下载了,这里我们只遍了两page_num,爬了80张图片,如下图: