小编Mac*_*ace的帖子

加快网络刮刀

我正在使用一个非常简单的网络刮刀抓取23770个网页scrapy.我对scrapy甚至python都很陌生,但设法编写了一个完成这项工作的蜘蛛.然而,它真的很慢(爬行23770页大约需要28个小时).

我查看了scrapy网页和邮件列表stackoverflow,但我似乎无法找到编写快速爬虫的通用建议,这对于初学者来说是可以理解的.也许我的问题不是蜘蛛本身,而是我运行它的方式.欢迎所有建议!

我已经在下面列出了我的代码,如果需要的话.

from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from scrapy.item import Item, Field
import re

class Sale(Item):
    Adresse = Field()
    Pris = Field()
    Salgsdato = Field()
    SalgsType = Field()
    KvmPris = Field()
    Rum = Field()
    Postnummer = Field()
    Boligtype = Field()
    Kvm = Field()
    Bygget = Field()

class HouseSpider(BaseSpider):
    name = 'House'
    allowed_domains = ["http://boliga.dk/"]
    start_urls = ['http://www.boliga.dk/salg/resultater?so=1&type=Villa&type=Ejerlejlighed&type=R%%C3%%A6kkehus&kom=&amt=&fraPostnr=&tilPostnr=&iPostnr=&gade=&min=&max=&byggetMin=&byggetMax=&minRooms=&maxRooms=&minSize=&maxSize=&minsaledate=1992&maxsaledate=today&kode=&p=%d' %n for n in xrange(1, 23770, 1)]

    def parse(self, response):
        hxs = HtmlXPathSelector(response) …
Run Code Online (Sandbox Code Playgroud)

python performance scrapy web-scraping scrapy-spider

16
推荐指数
2
解决办法
1万
查看次数

关注超链接和"过滤后的异地请求"

我知道那里有几个相关的线程,他们帮助了我很多,但我仍然不能一路走来.我正处于运行代码不会导致错误的程度,但我的csv文件中没有任何内容.我有以下Scrapy蜘蛛在一个网页上开始,然后跟随一个超链接,并抓取链接的页面:

from scrapy.http import Request
from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from scrapy.item import Item, Field

class bbrItem(Item):
    Year = Field()
    AppraisalDate = Field()
    PropertyValue = Field()
    LandValue = Field()
    Usage = Field()
    LandSize = Field()
    Address = Field()    

class spiderBBRTest(BaseSpider):
    name = 'spiderBBRTest'
    allowed_domains = ["http://boliga.dk"]
    start_urls = ['http://www.boliga.dk/bbr/resultater?sort=hus_nr_sort-a,etage-a,side-a&gade=Septembervej&hus_nr=29&ipostnr=2730']

    def parse2(self, response):        
        hxs = HtmlXPathSelector(response)
        bbrs2 = hxs.select("id('evaluationControl')/div[2]/div")
        bbrs = iter(bbrs2)
        next(bbrs)
        for bbr in bbrs:
            item = bbrItem()
            item['Year'] = bbr.select("table/tbody/tr[1]/td[2]/text()").extract()
            item['AppraisalDate'] …
Run Code Online (Sandbox Code Playgroud)

python callback scrapy web-scraping

10
推荐指数
2
解决办法
8785
查看次数

在不平衡面板数据集中生成每个ID的所有先前观察的滚动平均值

我正在尝试计算不平衡数据集的滚动方式.为了说明我的观点,我制作了这个数据的玩具示例:

ID  year  Var   RollingAvg(Var)
1   2000  2     NA
1   2001  3     2
1   2002  4     2.5
1   2003  2     3
2   2001  2     NA
2   2002  5     2
2   2003  4     3.5
Run Code Online (Sandbox Code Playgroud)

该列RollingAvg(Var)是我想要的,但不能得到.在的话,我要寻找的所有以前观测的滚动平均值Var为每ID.我曾尝试使用rollapply,并ddplyzooplyr包,但我看不出如何设置滚动窗口长度用于每个ID的所有的以前的意见.也许我应该使用plm包呢?任何帮助表示赞赏.

我在BALANCED面板数据集上看到了关于滚动方式的其他帖子,但我似乎无法推断他们对不平衡数据的回答.

谢谢,

中号

r plyr zoo

5
推荐指数
1
解决办法
1611
查看次数

在SQL中分隔地址字符串

我有一个Houses在一个sql server数据库上调用的表,它有一个包含(丹麦语)地址的列.在丹麦,街道名称总是在门牌号码之前,然后是公寓信息,如果它是公寓.我想将街道名称和数字分成两个字符串并忽略公寓信息.我的数据如下:

Address
Fisker Vejen 48B, 1.TV
Baunevej 29
Run Code Online (Sandbox Code Playgroud)

因此,一些街道名称有超过1个单词,有些地址有公寓信息,有些则没有.一些门牌号也有非数字字符.我希望它是:

Street_Name      House_Number
Fisker Vejen     48B
Baunevej         29
Run Code Online (Sandbox Code Playgroud)

我可以使用以下代码提取街道名称:

select case when a.NumStart> 0 then LEFT(a.Address,a.NumStart-1) ELSE a.Address END as Street_Name,
    FROM
    (select patindex('%[0-9]%',Address) as [NumStart], Address from Houses) a
Run Code Online (Sandbox Code Playgroud)

但是如果没有楼层信息,我无法获得门牌号码.有人可以帮忙吗?

谢谢!

sql sql-server string

5
推荐指数
1
解决办法
9113
查看次数

R 中的字符编码

我正在尝试读取csv由 Sql Server Management Studio 生成的文件,并UTF-8 通过. 我无法让 R 正确显示特殊字符。Rread.csv2()

\n

如果我将fileEncoding="UTF-8-BOM"导入停止在有 \xc3\xbf 的行。但是,打开 \xc3\xbf 中的文件时,Notepad++可以使用编码正确显示UTF-8。我尝试过不进行设置fileEncoding,但是特殊字符无法正确显示(当然)。

\n

csv 文件可在此处获取:\n https://www.dropbox.com/s/7y47i826ikq8ahi/Data.csv

\n

如何读取 csv 文件并以正确的编码显示文本?

\n

谢谢!!

\n

r character-encoding

4
推荐指数
1
解决办法
2万
查看次数

在Scrapy中选择具有非ASCII字符的节点

我有以下简单的web scraper Scrapy:

#!/usr/bin/env python
# -*- coding: latin-1 -*-

from scrapy.http import Request
from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector

class MySpiderTest(BaseSpider):
    name = 'MySpiderTest'
    allowed_domains = ["boliga.dk"]
    start_urls = ["http://www.boliga.dk/bbrinfo/3B71489C-AEA0-44CA-A0B2-7BD909B35618",]

    def parse(self, response):
        hxs = HtmlXPathSelector(response)
        item = bbrItem()
        print hxs.select("id('unitControl')/div[2]/table/tbody/tr[td//text()[contains(.,'Antal Badeværelser')]]/td[2]/text()").extract()
Run Code Online (Sandbox Code Playgroud)

但是当我运行蜘蛛时,我得到以下语法错误:

SyntaxError: Non-ASCII character '\xe6' in file... on line 32, but no encoding declared
Run Code Online (Sandbox Code Playgroud)

因为æxpath.该XPath是在工作Xpath CheckerFirefox.我尝试过URL编码æ,但是没有用.我错过了什么?

谢谢!

更新:我在代码的开头添加了编码声明(Latin-1应该支持丹麦字符)

xpath character-encoding scrapy web-scraping python-2.7

2
推荐指数
1
解决办法
1448
查看次数