scrapy爬取网址,进而爬取详情页问题
1、最容易出现的问题是爬取到的url大多为相对路径,如果直接将爬取到的url进行二次爬取就会出现以下报错:
raise ValueError('Missing scheme in request url: %s' % self._url),该错误的意思是request的url为无效链接。
解决方法:将相对路径转换为绝对路径
# -*- coding: utf-8 -*-
import scrapy
from pyquery import PyQuery
from ..items import City10Item
from scrapy.http import Request
from scrapy.utils.response import get_base_url
from urllib.parse import urljoin class CitySpiderTest1Spider(scrapy.Spider):
name = 'city_spider_test1'
allowed_domains = ['58.com']
start_urls = ['https://cq.58.com/chuzu/'] def parse(self, response):
jpy=PyQuery(response.text)
li=jpy('body > div.mainbox > div > div.content > div.listBox > ul > li').items()
for i in li:
item=City10Item()
item['name']=i('div.des > h2 > a').text()
item['url']=i('div.des > h2 > a').attr('href') #爬取url,此时为相对路径
item['price']=i('div.listliright > div.money > b').text()
base_url = get_base_url(response) #获取相对路径前级地址
abs_url=urljoin(base_url,item['url']) #转换为绝对路径 if item['url']:
yield Request(abs_url,
callback=self.detail_parse, #回调详情页函数
meta={'item':item}, #将参数传递给meta
priority=10,
dont_filter=True #强制不过滤 ) def detail_parse(self,response):
jpy = PyQuery(response.text)
item = response.meta['item'] #接收item
item['introduce_item'] = jpy('body > div.main-wrap > div.house-detail-desc > div.main-detail-info.fl > div.house-word-introduce.f16.c_555 > ul > li:nth-child(1) > span.a2').text() #提取房屋亮点
item['address'] = jpy('body > div.main-wrap > div.house-basic-info > div.house-basic-right.fr > div.house-basic-desc > div.house-desc-item.fl.c_333 > ul > li:nth-child(6) > span.dz').text() #房屋详情地址
item['phone_number'] = jpy('body > div.main-wrap > div.house-basic-info > div.house-basic-right.fr > div.house-fraud-tip > div.house-chat-phone > span').text() #电话号码
yield item
scrapy爬取网址,进而爬取详情页问题的更多相关文章
- 【图文详解】scrapy爬虫与动态页面——爬取拉勾网职位信息(2)
上次挖了一个坑,今天终于填上了,还记得之前我们做的拉勾爬虫吗?那时我们实现了一页的爬取,今天让我们再接再厉,实现多页爬取,顺便实现职位和公司的关键词搜索功能. 之前的内容就不再介绍了,不熟悉的请一定要 ...
- (3)分布式下的爬虫Scrapy应该如何做-递归爬取方式,数据输出方式以及数据库链接
放假这段时间好好的思考了一下关于Scrapy的一些常用操作,主要解决了三个问题: 1.如何连续爬取 2.数据输出方式 3.数据库链接 一,如何连续爬取: 思考:要达到连续爬取,逻辑上无非从以下的方向着 ...
- Scrapy 通过登录的方式爬取豆瓣影评数据
Scrapy 通过登录的方式爬取豆瓣影评数据 爬虫 Scrapy 豆瓣 Fly 由于需要爬取影评数据在来做分析,就选择了豆瓣影评来抓取数据,工具使用的是Scrapy工具来实现.scrapy工具使用起来 ...
- 七月在线爬虫班学习笔记(五)——scrapy spider的几种爬取方式
第五课主要内容有: Scrapy框架结构,组件及工作方式 单页爬取-julyedu.com 拼URL爬取-博客园 循环下页方式爬取-toscrape.com Scrapy项目相关命令-QQ新闻 1.S ...
- python3 requests + BeautifulSoup 爬取阳光网投诉贴详情实例代码
用到了requests.BeautifulSoup.urllib等,具体代码如下. # -*- coding: utf-8 -*- """ Created on Sat ...
- 多线程爬虫爬取详情页HTML
注意:如果想爬取详情页的信息请按须添加方法 import requests import os import re import threading from lxml import etree #爬 ...
- scrapy之盗墓笔记三级页面爬取
#今日目标 **scrapy之盗墓笔记三级页面爬取** 今天要爬取的是盗墓笔记小说,由分析该小说的主要内容在三级页面里,故需要我们 一一解析 *代码实现* daomu.py ``` import sc ...
- scrapy中使用selenium来爬取页面
scrapy中使用selenium来爬取页面 from selenium import webdriver from scrapy.http.response.html import HtmlResp ...
- Python爬虫:新浪新闻详情页的数据抓取(函数版)
上一篇文章<Python爬虫:抓取新浪新闻数据>详细解说了如何抓取新浪新闻详情页的相关数据,但代码的构建不利于后续扩展,每次抓取新的详情页时都需要重新写一遍,因此,我们需要将其整理成函数, ...
随机推荐
- 解决在linux环境安装setuptools的相关错误
RuntimeError: Compression requires the (missing) zlib module 缺少zlib包 解决方案 yum install zlib yum i ...
- 事务、cookie、session操作
事务 import os if __name__ == '__main__': os.environ.setdefault('DJANGO_SETTINGS_MODULE','BMS.settings ...
- HDU-1212.BigNumber(有关模数的定理)
本题大意:给出一个1000位以内的大数和一个小数,让你计算并给出大数对小数取余的结果. 本题思路:由下面的公式可以推出本题的计算公式,套入即可解决,建议自己把这个公式推一下,很简单的... 参考代码: ...
- Jasperreport5.6.9-----2
Jasperreport5.6.0生成PDF 上一篇讲的是jasperreport5.6.0生成pdf,运行后可以生成pdf,可是和我们的需求有点差距,我们是要求生成后,可以直接打开或保存,这就需 ...
- Linux系统(Centos)下安装nodejs并配置环境
总结Centos下安装nodejs并配置环境,记录成功安装的方法.推荐的安装方法是利用已编译的二进制文件安装,不推荐使用源码的形式安装,一是源码安装比较麻烦,二是需要自行下载编译浪费时间. 1.安装n ...
- UVa 548 Tree(二叉树最短路径)
You are to determine the value of the leaf node in a given binary tree that is the terminal node of ...
- swift - 接入听云监测 - 问题
1. 正常下载 探针SDK:https://report.tingyun.com/mobile-web/#/onlyHeader/sdkDownload 2.按步骤接入 ,添加库啊,什么的URLSc ...
- 支付宝H5 与网页端支付开发
在日常生活中,我们基本上都是进行微信与支付宝的支付方式尽心支付,这种方式确实大大便利了我们的生活,那么如何在我们的产品中进行微信与支付宝支付的植入开发呢? 我们先进行支付宝的H5与网页端支付开发,这里 ...
- Character 类
Character 类用于对单个字符进行操作. Character 类在对象中包装一个基本类型 char 的值 char ch = 'a'; // Unicode 字符表示形式char uniChar ...
- 更换Grade源为阿里云解决下载慢问题
作为程序员,即写的了代码也得翻得上围墙. 现在包管理工具(Maven/grade)的便捷性让人大快朵颐,再也不需要到处找jar包. 如果你没梯子又苦苦无法加快下载速度,不如按照以下设置一下. 对单个项 ...