标签:random 交流 详细 type reading alt data 学习 app
果壳网,作为一个开放、多元的泛科技兴趣社区,吸引了百万名有意思、爱知识、乐于分享的年轻人聚集在这里,用知识创造价值,为生活添加智趣。在这里可以关注感兴趣的人,阅读他们的推荐,也将有意思的内容分享给关注的人;依兴趣关注不同的小组,精准阅读喜欢的内容,并与网友交流;在“果壳问答”里提出困惑你的科技问题,或提供靠谱的答案。这是在百度百科上复制的。个人觉得果壳网上的文章还是不错的,比一些自媒体上的标题党强多了。
本文就是一个爬虫的案例,用来练手,以显得我在忙。
windows 10;
pycharm;
import requests from lxml import etree import re from fake_useragent import UserAgent import queue import csv import time,threading
这个案例的主要难点在于数据清洗。毕竟果壳网上的文章不是纯文本,但是我们想获得得就是纯文本文章。其次就是需要解决网站对标签的编码(个人不认为这算的上是反爬),但是果壳网会封ip的。我在本案例中没有对齐进行处理。
对于这一种现象,我采用的就是直接对照,然后进行替换。
import requests from lxml import etree import re from fake_useragent import UserAgent import queue import csv import time,threading ua=UserAgent() url_Queue=queue.Queue(1000) Q_num=queue.Queue(1000) for i in range(390):Q_num.put(i) #获取每一个文章页面的url def get_url(): while Q_num: url=‘https://www.guokr.com/apis/minisite/article.json?retrieve_type=by_wx&channel_key=pac&offset={}&limit=10‘.format(Q_num.get()*10) try: txt=requests.get(url,headers={"User-Agent":ua.random}).text time.sleep(3) except: print(‘文章页面抓取完毕‘) break article_urls=re.findall(‘http://www.guokr.com/article/\d+/‘,txt) for article_url in article_urls: print(article_url) url_Queue.put(article_url) #获取每一个文章页面的详细内容 def get_data(): while url_Queue: url=url_Queue.get() try: time.sleep(3) txt = requests.get(url, headers={"User-Agent": ua.random}).text.replace(r‘\u003E‘, ‘>‘).replace(r‘\u003C‘,‘<‘).replace(r‘\u002F‘, r‘/‘).replace(r‘\"‘, ‘"‘) .replace(‘\n‘, ‘‘).replace(‘\t‘, ‘‘).replace(‘\r‘, ‘‘) txt = re.sub(‘图片:.+?</p>‘, ‘</p>‘, txt) html = etree.HTML(txt) title = html.xpath(‘//h2/text()‘)[0].strip().replace(‘\n‘, ‘‘) print(title) author = html.xpath(‘//*[@id="app"]/section[2]/div/div[2]/div/div[2]/section/span/text()‘)[0] w_type = html.xpath(‘//span[@id="copyright_logo"]/text()‘)[0] contents = html.xpath(‘//section//text()‘) f_writer.writerow([title,author,w_type,‘‘.join(contents[52:-60]).strip()]) except Exception as e: time.sleep(5) pass if __name__ == ‘__main__‘: f=open(‘guokes.csv‘,‘w+‘,encoding=‘utf-8‘,newline=‘‘) f_writer=csv.writer(f) f_writer.writerow([‘title‘,‘author‘,‘w_type‘,‘content‘]) for i in range(10): ta=threading.Thread(target=get_url) ta.start() for j in range(5): t1=threading.Thread(target=get_data) t1.start()
1. 代码不够简洁,有一些用于的代码。
2. 没有解决ip被封的问题。
3. 技术在不停的进步,这些基础的技术也会被替代,最近发现了一个比requests更好的第三方库。这个库就是requests-html。
4. 终身学习,不能停下学习的脚步。
5.缓进则退,不进则亡。
标签:random 交流 详细 type reading alt data 学习 app
原文地址:https://www.cnblogs.com/cwily/p/12696840.html