Python实战:抓取商品信息并储存在mongoDB的数据库中

运行结果:

详细情况:

我的代码:

from bs4 import BeautifulSoup
import requests, time
import pymongo

client = pymongo.MongoClient("localhost", 27017) # 访问mongoDB,创建数据库和表单
ceshi = client["ceshi"]
url_list = ceshi["url_list"]
item_info = ceshi["item_info"]
#spider1
def get_links_from(channel, pages,who_sells=0): #抓取列表页上商品的详情页链接
#http://bj.58.com/pbdn/0/pn2/
list_view = "{}{}/pn{}/".format(channel,str(who_sells), str(pages))
wb_data = requests.get(list_view)
time.sleep(1)
soup = BeautifulSoup(wb_data.text, 'lxml')
if soup.find("td", "t"):
for link in soup.select("tr.zzinfo td.t a.t"):
item_link = link.get("href").split("?")[0]
url_list.insert_one({"url" : item_link})
print(item_link)
else:
pass #到达列表页的最后的页面下一个页面
#spider2
def get_item_info(url): #抓取详情页商品的信息
wb_data = requests.get(url)
soup = BeautifulSoup(wb_data.text, 'lxml')
title = soup.select("div.box_left_top > h1")[0].text
price = soup.select("span.price_now > i")[0].text
area = soup.select("div.palce_li > span > i")[0].text
item_info.insert_one({'title':title, 'price':price, 'area':area})
print({'title':title, 'price':price, 'area':area})

get_links_from("http://bj.58.com/pbdn/",2)
for item in url_list.find():
get_item_info(item["url"])

总结:

-1 调试代码时,记得注释掉创建数据库的代码。因为每次运行代码时,商品信息的字典可 能都不一样,所以它们都会被保存到数据库里,这造成了信息的重复。

-2 详情页商品信息的抓取和列表页商品详情页链接的抓取最好分开进行。因为一来可以提高代码的执行效率,二来当详情页商品信息的抓取失败时,修改后程序可以从这里开始,而不用再下载商品信息详情页的链接,而后再进行详情页商品信息的抓取

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,467评论 25 709
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,285评论 4 61
  • 1.CDN缓存更方便 2.突破浏览器并发限制(一般每个域名建立的链接不超过6个) 3.Cookieless,节省带...
    铁木真丫丫丫阅读 1,759评论 0 0
  • 1. 我叫寒小溪,是一个循规蹈矩的姑娘,只喝白水,不吃垃圾食品,十点半会准时睡觉,工作之外的生活,就是跑跑步、看看...
    木子一叶阅读 285评论 0 0
  • 1.鼠标事件,页面所有元素都可触发 click:当用户单击鼠标按钮或按下回车键时触发。 input.onclick...
    糖心m阅读 166评论 0 0