进行大数据爬取数据,存入Mongodb
2016-11-24 17:46
369 查看
爬虫刚入门,对赶集网进行一次所有商品大数据的爬取
使用了多线程,存到数据库里,目前不知道要爬多久
有一个要注意的地方,比如我们要进行两次爬虫,一次是把每个项目的链接爬下来,一次是把每个项目里的详情信息爬下来,最好是先把每个项目的链接存下来,并用数据库保存,然后再从数据库取出每个链接,进行爬取详情信息。不要每爬到一个链接,就进去把这个链接的信息爬出来,这样不仅速度变慢,往往在爬取详情信息过程中会发生网络超时等断开爬虫的情况,如果是每次爬取链接都去取信息,那么一旦爬虫断了,每次都要重新开始
使用了多线程,存到数据库里,目前不知道要爬多久
有一个要注意的地方,比如我们要进行两次爬虫,一次是把每个项目的链接爬下来,一次是把每个项目里的详情信息爬下来,最好是先把每个项目的链接存下来,并用数据库保存,然后再从数据库取出每个链接,进行爬取详情信息。不要每爬到一个链接,就进去把这个链接的信息爬出来,这样不仅速度变慢,往往在爬取详情信息过程中会发生网络超时等断开爬虫的情况,如果是每次爬取链接都去取信息,那么一旦爬虫断了,每次都要重新开始
from multiprocessing import Pool from channel_extract import channel from page_parsing import get_item_info, get_links def get_all_link_from(channel): for i in range(1, 100): get_links(channel, i) if __name__ == '__main__': pool = Pool() pool.map(get_all_link_from, channel.split()) pool.close() pool.join()
import time from page_parsing import url_list while True: print(url_list.find().count()) time.sleep(5)
from bs4 import BeautifulSoup import requests import time url = 'http://bj.ganji.com/wu/' host_url = 'http://bj.ganji.com' def get_channel(url): wb_data = requests.get(url) soup = BeautifulSoup(wb_data.text, 'lxml') links = soup.select('div > div > dl > dt > a') for link in links: new_url = host_url + link.get('href') print(new_url) get_channel(url) channel = ''' http://bj.ganji.com/jiaju/ http://bj.ganji.com/rirongbaihuo/ http://bj.ganji.com/shouji/ http://bj.ganji.com/shoujihaoma/ http://bj.ganji.com/bangong/ http://bj.ganji.com/nongyongpin/ http://bj.ganji.com/jiadian/ http://bj.ganji.com/ershoubijibendiannao/ http://bj.ganji.com/ruanjiantushu/ http://bj.ganji.com/yingyouyunfu/ http://bj.ganji.com/diannao/ http://bj.ganji.com/xianzhilipin/ http://bj.ganji.com/fushixiaobaxuemao/ http://bj.ganji.com/meironghuazhuang/ http://bj.ganji.com/shuma/ http://bj.ganji.com/laonianyongpin/ http://bj.ganji.com/xuniwupin/ http://bj.ganji.com/qitawupin/ http://bj.ganji.com/ershoufree/ http://bj.ganji.com/wupinjiaohuan/ '''
from bs4 import BeautifulSoup import requests import time import pymongo import random client = pymongo.MongoClient('localhost', 27017) ganji = client['gangji'] url_list = ganji['url_list'] item_info = ganji['item_info'] headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.87 Safari/537.36', 'Connection':'keep-alive' } proxy_list = [ 'http://101.4.136.34:81', 'http://182.96.194.184:8118' ] proxy_ip = random.choice(proxy_list) proxies = {'http':proxy_ip} def get_links(channel, page): list_view = '{}o{}'.format(channel, page) wb_data = requests.get(list_view) soup = BeautifulSoup(wb_data.text, 'lxml') links = soup.select('td.t > a.t') if(soup.find('td', 't')): for link in links: new_url = str(link.get('href').split('?')[0]) url_list.insert_one({'url':new_url}) else: pass def get_item_info(url): wb_data = requests.get(url, headers = headers, proxies = proxies) soup = BeautifulSoup(wb_data.text, 'lxml') no_longer_exist = (wb_data.status_code == 404) if no_longer_exist: pass else: try: title = soup.title.text price = soup.select('span.price_now > i')[0].get_text() area = soup.select('div.palce_li > span > i')[0].get_text() data = { 'title':title, 'price':price, 'area' :area } print(data) except (AttributeError, IndexError): pass
相关文章推荐
- python - 利用Pandas对某app数据进行整理、分析并存入mongodb
- 基于Mongodb进行分布式数据存储
- 基于MongoDB进行分布式数据存储的步骤
- MongoDB数据转移到Mysql库进行数据分析
- Python 爬虫7——自定义Item Pipeline将数据存入MongoDB
- 一月十日练习习题,1数组数据存入字典并输出2降序 和倒叙 输出数组中内容3对字符串当中信息进行查找是否存在4 把数组当中信息按照中文排序
- 对存入泛型中的数据进行搜索和排序(Generic)
- OC字典存入数组,输出数组中数据,并且删除小明一项,然后进行排序、现根据班级排序,班级相同的用年龄进行排序
- 8.非关系型数据库(Nosql)之mongodb的应用场景(关系型数据库 和 Mongodb进行CRUD时数据用时的比较)
- 把文件二进制数据存入mongodb
- MongoDB进行MapReduce的数据类型
- 基于Mongodb进行分布式数据存储
- 基于Mongodb进行分布式数据存储
- 基于Mongodb进行分布式数据存储
- 基于Mongodb进行分布式数据存储
- 使用C#对MongoDB中的数据进行查询,修改等操作
- 使用C#对MongoDB中的数据进行查询,改动等操作
- 将数据存入redis进行读取数据
- 抓取网络json数据并存入mongodb(2)