前面已經安裝了scrapy,下面來實現第乙個測試程式。
scrapy是乙個爬蟲框架,他的基本流程如下所示(下面截圖來自網際網路)
簡單的說,我們需要寫乙個item檔案,定義返回的資料結構;寫乙個spider檔案,具體爬取的資料程式,以及乙個管道 pipeline 檔案,作為後續操作,比如儲存資料等等。
scrapy startproject dangdang
scrapy genspider -t basic dd dangdang.com
這樣他會自動建立乙個爬蟲檔案,結構如下所示:
前面第二步已經自動生成了乙個模板,我們直接修改就行。
item['title']=response.xpath(u"//a[@dd_name='單品標題']/text()").extract()
item['url']=response.xpath("//a[@dd_name='單品標題']/@href").extract()
text = response.body
# content_type = chardet.detect(text)
# if content_type['encoding'] != 'utf-8':
# text = text.decode(content_type['encoding'])
# text = text.encode('utf-8')
# print(text)
yield item
for i in range(2,20):
url=''%i
yield request(url,callback=self.parse)
為了使用pipeline,配置檔案需要做個小修改,我順便關掉了對robot檔案的確認
settings.py
robotstxt_obey = false
item_pipelines =
pipeline.py
# -*- coding: utf-8 -*-
# define your item pipelines here
## don't forget to add your pipeline to the item_pipelines setting
# see:
import pymysql
class
dangdangpipeline
(object):
defprocess_item
(self, item, spider):
conn=pymysql.connect(host='127.0.0.1',user='root',passwd='root',db='dangdang',use_unicode=true,charset='utf8')
for i in range(0,len(item['title'])):
title=item['title'][i]
link=item['url'][i]
comment=item['comment'][i]
print(type(title))
print(title)
# sql="insert into dd(title,link,comment) values ('"+title+"','"+link+"','"+comment+"')"
sql = "insert into dd(title,link,comment) values('" + title + "','" + link + "','" + comment + "')"
try:
conn.query(sql)
except exception as err:
pass
conn.close()
return item
我最後的資料要儲存到mysql裡面,python裡面可以通過pymysql進行操作。我提前在mysql命令列介面裡面建立了乙個資料庫和空表
mysql>
create database dangdang;
mysql>
create table dd(id int auto_increment primary, title varchar(100), link varchar(100), comment varchar(32));
scrapy crawl dd
如果不想看日誌 可以使用
scrapy crawl dd --nolog
test.py
#!/usr/bin/env python
#! -*- coding:utf-8 -*-
# author: yuan li
import pymysql
conn=pymysql.connect(host='127.0.0.1',user='root',passwd='root',db='dangdang',use_unicode=true,charset='utf8')
cursor = conn.cursor(cursor=pymysql.cursors.dictcursor)
#sql查詢
cursor.execute("select * from dd")
row=cursor.fetchall()
for i in row:
print(i)
conn.close()
結果測試成功
scrapy 我的第乙個scrapy爬蟲
import scrapy from scrapy.linkextractors import linkextractor linkextractor是用來指定頁面提取規則的extract links 是用來獲取連線的 from items import baiduyueduitem 這是我的用來封...
我的第乙個程式
我的第乙個vc程式終於寫完了,花了2周,之前從沒有用vc寫過程式,也沒讀過什麼程式,只是在看書,看了幾百頁 mfc windows程式設計 正好有個機會,老師讓寫個vc程式,就試著寫了。程式的功能是不同地方的access的更新的記錄整合到一台機子上的access中,支援斷網自動連線,用的是socke...
我的第乙個爬蟲(爬取糗百的段子)
coding utf8 import requests from bs4 import beautifulsoup import os import codecs import mysqldb def mysql title conn mysqldb.connect host 127.0.0.1 p...