有一次在简书上不小心看到这个爬虫上百万的数据,确实是上百万啊。我真的日了仙人板板了。
可以看一下网站:http://www.panduoduo.net/c/4/16
确实是挺多的数据。
先上要爬取的内容,虽然比较少,准备的有些少了:
爬取的内容结果
爬取下来的确实很简陋,突然发现自己针对各种各样的tag,属性用的还是不熟悉,这次用的beautifulsoup,还是用的不熟悉,再加上该网站一些标签,内容不定,故没有敢轻易再继续爬取了。这次用的是多进程进行的爬取,爬取的速度依然还是慢,我从快五点
左右出去的,现在还在爬着,确实也难为了,不过这也是我第一次进行百万数据的爬取,虽然不知道里面的内容是不是重复的太多,但爬取了这么久,还是没有报错。可见现在遇到的问题都是小问题,以后肯定会出现大的问题的,
突然发现,一些常用的三方库,还是要多练习比较好。不能是只用了一次就能完全掌握了的。
贴上源代码,让之前的不可能爬取的成为可能!
# encoding=utf8
import requests
import re
from bs4 import BeautifulSoup
from multiprocessing import Pool
url = 'http://www.panduoduo.net/c/4/1'
headers = {
'Cookie': 'Hm_lvt_11b39dcf34d304adbc3f3f49e67cb940=1483436227; CNZZDATA5767138=cnzz_eid%3D1508734121-1483434808-%26ntime%3D1483434808; sh=%E7%94%B5%E5%BD%B1+++python3%E8%A7%86%E9%A2%91%E6%95%99%E7%A8%8B+++python3%20%E4%BC%A0%E6%99%BA%E6%92%AD%E5%AE%A2+++python3+++%E6%B8%B8%E6%88%8F'
,
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.2372.400 QQBrowser/9.5.10548.400'
}
def getHtml(url):
req = requests.get(url, headers=headers)
return req.text
def parse_panduoduo(url):
soup = BeautifulSoup(url, 'lxml')
url_name = soup.select("table.list-resource > tr")
a_url = soup.findAll('a', {'class': 'blue'})
# for name in url_name:
# print('url_name ' + name.get_text())
# for url in a_url:
# print("ulll " + url.get_text())
# 标题
titles = soup.findAll('a', {'class': 'blue'})
for title in titles:
print(title.string)
# 获取链接(这里还包含其他链接 主要是获取:/r下的链接)
data = soup.findAll('a', attrs={'href': True})
for da1 in data:
print('data ' + str(da1.get('href')))
print('title ' + str(da1.get('title')))
# 大小
sizes = soup.findAll('td', {'class': 't2'})
for size in sizes:
print('size ' + str(size.string))
# 该用户的分享
# data = getHtml(url)
# parse_panduoduo(data)
def getData(page):
url = 'http://www.panduoduo.net/c/4/{0}'.format(page)
print("第{0}页Url ".format(page)+url)
print("第{0}页".format(page))
data = getHtml(url)
parse_panduoduo(data)
if __name__ == '__main__':
pool = Pool(processes=10)
pool.map_async(getData, range(1, 86151))
pool.close()
pool.join()
感觉随着入门逐渐的深入,自己的动力没有那么足,多次练习完后都是用的差不多一样的操做