网页视频抓取工具 知乎(自学爬虫两个月了,记录一下自己的爬虫学习经历 )

优采云 发布时间: 2022-02-24 05:03

  网页视频抓取工具 知乎(自学爬虫两个月了,记录一下自己的爬虫学习经历

)

  自学爬虫两个月,记录下我的爬虫学习心得,和大家分享一下可用的爬虫技术:

  一、爬虫原理

  简单介绍一下爬虫的原理。核心爬虫分为两步:

  获取网页提取信息

  一般来说,获取网页就是在浏览器中输入一个网址,然后获取该网址所指向的网页的所有信息。但是,通过编程,可以直接在程序中输入网址,然后获取网页。此步骤中使用的 Python 库是 urllib 和 request。

  提取信息就是掌握你需要的关键信息。网页信息中收录了很多无关紧要的信息,比如“作为一个理性的消费者,你为什么要关心213青年对你的看法?” 这句话,爬下来的原创资料是:

  身为一个理智的消费者,为何要在意二13青年对你的看法呢?</p>

  为了提取有用信息,剔除不相关信息,需要Beautiful Soup、Pyquery等Python库。

  二、知乎爬虫

  在常用的网站中,比较容易爬的有知乎、微博等。首先这两个网站的信息都是公开的,与微信不同,例如,只有朋友可以被其他人查看。二是知乎,微博不用登录账号直接浏览,不像微信必须登录微信账号;最后两个可以直接用浏览器登录,不像微信,必须用app打开。

  知乎爬虫使用request获取网页,使用Json和Pyquery提取信息。

  废话不多说,直接放代码,库文件:

  import requests

from pyquery import PyQuery as pq

#import json

import csv,codecs#解决乱码!

import os

import numpy as np

from hashlib import md5

from bs4 import BeautifulSoup

  攀登知乎回答“2021年买得起的轻薄本有哪些推荐”,网址链接和头文件:

  url = &#39;https://www.zhihu.com/question/438588361/answer/1703903763&#39;#&#39;https://www.zhihu.com/question/437319323/answer/1785586165&#39;

headers = {

&#39;User-Agent&#39;: &#39;Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36&#39;

}

  ajax处理获取网页:

  base_url = &#39;https://www.zhihu.com/api/v4/questions/421463194/answers?&#39;

include = &#39;data%5B%2A%5D.is_normal%2Cadmin_closed_comment%2Creward_info%2Cis_collapsed%2Cannotation_action%2Cannotation_detail%2Ccollapse_reason%2Cis_sticky%2Ccollapsed_by%2Csuggest_edit%2Ccomment_count%2Ccan_comment%2Ccontent%2Ceditable_content%2Cattachment%2Cvoteup_count%2Creshipment_settings%2Ccomment_permission%2Ccreated_time%2Cupdated_time%2Creview_info%2Crelevant_info%2Cquestion%2Cexcerpt%2Cis_labeled%2Cpaid_info%2Cpaid_info_content%2Crelationship.is_authorized%2Cis_author%2Cvoting%2Cis_thanked%2Cis_nothelp%2Cis_recognized%3Bdata%5B%2A%5D.mark_infos%5B%2A%5D.url%3Bdata%5B%2A%5D.author.follower_count%2Cbadge%5B%2A%5D.topics%3Bdata%5B%2A%5D.settings.table_of_content.enabled&#39;

def get_page(page):#page0就是第一页

url1 = &#39;include=&#39; + include+ &#39;&limit=5&&#39; + &#39;offset=&#39; + str(page)+ &#39;&platform=desktop&sort_by=default&#39;

url = base_url + url1#urlencode(params)

try:

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

if response.status_code == 200:

return response.json()

except requests.ConnectionError as e:

print(&#39;Error&#39;, e.args)

  好的:

  def parse_page(json):

if json:

items = json.get(&#39;data&#39;)

for item in items:

zhihu = {}

zhihu[&#39;作者&#39;] = item.get(&#39;author&#39;).get(&#39;name&#39;)

zhihu[&#39;回答&#39;] = pq(item.get(&#39;content&#39;)).text()

zhihu[&#39;赞&#39;] = item.get(&#39;voteup_count&#39;)

yield zhihu#*敏*感*词*

  主函数执行:

  if __name__==&#39;__main__&#39;:

i = 0

f = codecs.open(&#39;对于笔记本的选择,轻薄本真的被看不起吗?.csv&#39;, &#39;w+&#39;, &#39;utf_8_sig&#39;)

ftxt = open(&#39;对于笔记本的选择,轻薄本真的被看不起吗?.txt&#39;, &#39;w+&#39;, encoding=&#39;utf_8&#39;)

fieldnames = [&#39;作者&#39;, &#39;回答&#39;,&#39;赞&#39;]

writer = csv.DictWriter(f, fieldnames=fieldnames)

writer.writeheader()

while True:

js = get_page(5*i)

results = parse_page(js)

for res in results:

writer.writerow(res)

for detail in res.values():

ftxt.write(str(detail)+&#39;\n&#39;)

ftxt.write(&#39;\n&#39; + &#39;=&#39; * 50 + &#39;\n&#39;)

if js.get(&#39;paging&#39;).get(&#39;is_end&#39;):

print(&#39;finish!&#39;)

break

i+=1

f.close()

ftxt.close()

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线