一,scrapy请求

yield scrapy.Request(url=url, dont_filter=True, callback=self.page, meta={'item': copy.deepcopy(item)})

yield scrapy.FormRequest(url=self.url, headers=self.unicornHeader, method='POST', formdata=self.FormData, meta=self.customerData, callback=self.after_post, errback=self.error_handle, dont_filter=True)
item = response.meta['item']

二,xpath提取数据

response.xpath('//*[@id="__EVENTVALIDATION"]/@value').extract_first().strip()
response.xpath('//div[@class="mt20 articl-know"][1]/p[4]/span[2]/text()').extract_first().strip()

三,scarpy 判断

if isinstance(item, ArticleViewsCountItem):
if 'food_id' in item.keys():

四,scrapy  登入

start_urls = ['http://renren.com/']

def parse(self, response):
data = {
'email': '111',
'password': 'sssws'
}
print('login.....')
yield scrapy.FormRequest.from_response(response,
formdata=data,
callback=self.next,
)

五.scrapy 启动

scrapy crawl spiderName
scrapy crawl spiderName -s LOG_FILE=spider.log # 指定日志输出文件

六.设置代理

1.middlewares.py

meta={'item': copy.deepcopy(item), 'proxy': "10.133.3.26:1080"}   # 设置单个请求代理  是spider.py中

import requests

class MyproxiesSpiderMiddleware(object):

    def process_request(self, request, spider):
proxies = requests.get('http://127.0.0.1:5000/get').content.decode('utf-8')
print(proxies)
request.meta["proxy"] = "http://{}".format(proxies)
# request.meta["proxy"] = "http://36.249.49.43:9999" import logging
import random
import redis
from steam_users.settings import REDIS_HOST, REDIS_POST, REDIS_DATABASE, REDIS_PASSWORD
logger = logging.getLogger(__name__) class ProxyDownloadMiddleware(object):
def __init__(self):
self.conn = redis.Redis(host=REDIS_HOST, port=REDIS_POST, password=REDIS_PASSWORD, db=REDIS_DATABASE) def queue_len(self):
# 获取队列长度
return self.conn.llen("proxies") def get_redis(self):
# 随机获取redis中的一个ip
num = random.randint(1, self.queue_len()) - 1
return self.conn.lindex('proxies', num).decode('utf-8') def process_request(self, request, spider):
if request.url.startswith("http://"):
request.meta['proxy'] = "http://{proxy_ip}".format(proxy_ip=self.get_redis())
elif request.url.startswith("https://") and not request.url.startswith('https://steamcommunity'):
print('ff')
request.meta['proxy'] = "https://{proxy_ip}".format(proxy_ip=self.get_redis())
print("using proxy: {}".format(request.meta['proxy']))
# # 使用私密代理或独享代理需要将用户名和密码进行base64编码,然后赋值给request.headers["Proxy-Authorization"]
# # 如果是开放代理就不需要以下步骤,直接设置代理IP即可
# user_password = "{username}:{password}".format(username='username', password='password')
# b64_user_password = base64.b64encode(user_password.encode("utf-8"))
# request.headers["Proxy-Authorization"] = "Basic " + b64_user_password.decode("utf-8")
return None

2..setting中开启代理中间件

DOWNLOADER_MIDDLEWARES = {
'jxy.middlewares.MyproxiesSpiderMiddleware': 543,
}

七.数据入库

import pymysql

class MogujiePipeline(object):
def __init__(self):
# 创建数据库连接
self.db = pymysql.connect(host='localhost', port=3306, database='cfda', user='root', password='root',
charset='utf8')
# self.db = pymysql.connect(host='115.238.111.198', port=3306, database='spider_yu', user='spider',
# password='Kangce@0608',
# charset='utf8')
self.cursor = self.db.cursor() def process_item(self, item, spider):
# 判断爬取的字段数据库中是否已经存在
num = self.cursor.execute('select id from jiankangshuju_food where url="{}"'.format(item["url"]))
if not num:
list_key = []
list_lalues = []
for key, lalues in item.items():
list_key.append(key)
list_lalues.append("'" + str(lalues).replace("'", "‘") + "'")
# 拼接sql语句
insert_sql = "insert into jiankangshuju_food({}) values({})".format(', '.join(list_key),
', '.join(list_lalues))
try:
self.cursor.execute(insert_sql)
self.db.commit()
except:
print('insert_sql:', insert_sql) # 查询数据
self.cursor.execute("select * from catalogue")
data = self.cursor.fetchone()
data = self.cursor.fetchall() # 更新数据
self.cursor.execute("update catalogue set ''='{}', ''='{}' where id={}".format())
self.db.commit() # 删除数据
self.cursor.execute("delete from catalogue where id={}".format())
self.db.commit() return item def close_spider(self, spider):
# 关闭数据库的连接
self.cursor.close()
self.db.close() 

八.def start_requests(self)

# get请求
def start_requests(self):
db = pymysql.connect(host='localhost', port=3306, database='game', user='root', password='root',
charset='utf8', autocommit=True)
cursor = db.cursor()
cursor.execute('select id, appid, last_modified from steam_appid where id =1085660')
for appid in cursor.fetchall():
item = {}
item['appid'] = appid[1]
item['last_modified'] = appid[2]
yield scrapy.Request(url='https://store.steampowered.com/app/{}/'.format(appid[1]),
meta={'item': copy.deepcopy(item)}) # post request payload
yield scrapy.Request(url='https://www.wegame.com.cn/api/rail/web/data_filter/game_info/by_game_id',
meta={'item': copy.deepcopy(item)},
headers={'Content-Type': 'application/json;charset=UTF-8',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36',
},
body=json.dumps({"game_ids": ["{}".format(str(appid[1]))],
"filters": [],
"stamp": {"agent_client_language": "zh_CN"},
"response_format": 0}, ensure_ascii=False),
dont_filter=True,
method='POST')

九,数据库配置

# ---------服务器mysql配置----------
# MYSQL_HOST = '192.168.107.229'
# MYSQL_POST = 3306
# MYSQL_DATABASE = 'spider_app'
# MYSQL_PASSWORD = '123456'
# MYSQL_USER = 'root' # -------------本地mysql配置--------------
MYSQL_HOST = '10.133.3.26'
MYSQL_POST = 3306
MYSQL_DATABASE = 'spider_app'
MYSQL_PASSWORD = 'root'
MYSQL_USER = 'root' from steam_users.settings import MYSQL_HOST, MYSQL_POST, MYSQL_DATABASE, MYSQL_PASSWORD, MYSQL_USER pymysql.connect(host=MYSQL_HOST, port=MYSQL_POST, database=MYSQL_DATABASE, user=MYSQL_USER,
password=MYSQL_PASSWORD,
charset='utf8', autocommit=True)

  

  

  

  

  

scrapy 常用代码的更多相关文章

  1. 【转载】GitHub 标星 1.2w+,超全 Python 常用代码合集,值得收藏!

    本文转自逆袭的二胖,作者二胖 今天给大家介绍一个由一个国外小哥用好几年时间维护的 Python 代码合集.简单来说就是,这个程序员小哥在几年前开始保存自己写过的 Python 代码,同时把一些自己比较 ...

  2. GCD 常用代码

    GCD 常用代码 体验代码 异步执行任务 - (void)gcdDemo1 { // 1. 全局队列 dispatch_queue_t q = dispatch_get_global_queue(0, ...

  3. 转--Android实用的代码片段 常用代码总结

    这篇文章主要介绍了Android实用的代码片段 常用代码总结,需要的朋友可以参考下     1:查看是否有存储卡插入 复制代码 代码如下: String status=Environment.getE ...

  4. 刀哥多线程之03GCD 常用代码

    GCD 常用代码 体验代码 异步执行任务 - (void)gcdDemo1 { // 1. 全局队列 dispatch_queue_t q = dispatch_get_global_queue(0, ...

  5. jquery常用代码集锦

    1. 如何修改jquery默认编码(例如默认GB2312改成 UTF-8 ) 1 2 3 4 5 $.ajaxSetup({     ajaxSettings : {         contentT ...

  6. Mysql:常用代码

    C/S: Client Server B/S: Brower Server Php主要实现B/S .net IIS Jave TomCat LAMP:L Mysql:常用代码 Create table ...

  7. javascript常用代码大全

    http://caibaojian.com/288.html    原文链接 jquery选中radio //如果之前有选中的,则把选中radio取消掉 $("#tj_cat .pro_ca ...

  8. Android 常用代码大集合 [转]

    [Android]调用字符串资源的几种方法   字符串资源的定义 文件路径:res/values/strings.xml 字符串资源定义示例: <?xml version="1.0&q ...

  9. NSIS常用代码整理

    原文 NSIS常用代码整理 这是一些常用的NSIS代码,少轻狂特意整理出来,方便大家随时查看使用.不定期更新哦~~~ 1 ;获取操作系统盘符 2 ReadEnvStr $R0 SYSTEMDRIVE ...

随机推荐

  1. 基于centos7的真实机环境下安装 vmware workstastion

    通常我们在在虚拟机里面搭建大数据集群,如果我们换在真实机里面搭建大数据集群的话, 我们的每一台电脑就是centos系统了,这个时候如果我们需要按vmware 软件的话我们就需要下载不同的版本了 废话不 ...

  2. bat文件去括号

    @Echo Off&SetLocal ENABLEDELAYEDEXPANSION FOR %%a in (*) do ( set "name=%%a" set " ...

  3. git将多个commit合并成一个

    1. 查看提交历史(最近10个) git log - 2. 回到前面第十个commit,且将后面九个commit提交的内容状态改为未提交 git reset commitID(第十个commit的ID ...

  4. AJAX发送 PUT和DELETE请求参数传递注意点,了解一下

    ajax发送put 和 delete 请求时,需要传递参数,如果参数在url地址栏上,则可以正常使用, 如果在 data:中需要传递参数,(浏览器会使用表单提交的方式进行提交) 则需要注意此时应作如下 ...

  5. jquery前期总结,及实例

    一.元素查找 1.选择器 id=d------------------------------------------>$("#d") class=c1----------- ...

  6. CMD命令搜索有某文本文件的内容

    FIND "字符串" <文件名>其中文件名部分可包含驱动器号和目录名部分,也可使用*,?通配符.另外有几个参数可用,  /V         显示所有未包含指定字符串的 ...

  7. python3封装Api接口

    注:本篇的代码和语法基于Python3.5环境,下面将用到Python 的Flask框架 封装接口主要讲静态接口(无参数传入).动态接口(有参数传入,不同参数返回的信息不同).针对动态接口有三种传参方 ...

  8. 《锋利的JQuery》中的动画效果:

    说实话,虽然这本书已经很老了,老到什么程度呢,这本书以JQuery1.9以前的版本写就的,toggle()方法的(func1,func2,...)这个切换事件的功能已经被删去了 但是这本书还是挺8错的 ...

  9. scrapy工作原理概述

    当运行scrapy crawl spider 时,会生成一个crawl命令对象,scrapy是调用execute函数(cmdlin.py)来执行命令的,execute函数会给命令对象添加crawler ...

  10. git的团队协作开发

    title: git的团队协作开发 date: 2018-04-24 14:00:03 tags: [git] --- 项目负责人创建组织架构 在控制面板中点击组织按钮,添加组织,在这里可以把组织理解 ...