scrapy allow all subdomainsのほぼ重複しています!許可されたドメインごとに、フィルタリング結果がフィルタリングされません。
注:最初はすべて私はScrapyを新しくしました&私はthisの質問にコメントするには十分な評判がありません。だから、私は新しいものを尋ねることにしました!
問題文:
私は特定のウェブサイトからの電子メールアドレスをスクラップするBeautifulSoupを使用していました。特定のページ(つまりexample.com)でメールアドレスが利用可能な場合は正常に動作していますが、ご利用いただけない場合はexample.com/contact-usでご利用いただけます。
そのため、私はScrapyを使用することに決めました。私はallowed_domains を使用してドメイン関連のリンクのみを取得していますが、オフサイトのリンクもすべて提供しています。そして、私は@agstudyによって提案された別のアプローチを試みました。this質問でSgmlLinkExtractorをルールに使用しました。
その後私はこのエラーを得た、
基本的にTraceback (most recent call last): File "/home/msn/Documents/email_scraper/email_scraper/spiders/emails_spider.py", line 14, in <module> from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor File "/home/msn/Documents/scrapy/lib/python3.5/site-packages/scrapy/contrib/linkextractors/sgml.py", line 7, in <module> from scrapy.linkextractors.sgml import * File "/home/msn/Documents/scrapy/lib/python3.5/site-packages/scrapy/linkextractors/sgml.py", line 7, in <module> from sgmllib import SGMLParser ImportError: No module named 'sgmllib'
、はImportErrorは、Python 3.xではsgmlibの廃止(単純なSGMLパーサ)についてです私はきたもの
これまでに試した:
class EmailsSpiderSpider(scrapy.Spider):
name = 'emails'
# allowed_domains = ['example.com']
start_urls = [
'http://example.com/'
]
rules = [
Rule(SgmlLinkExtractor(allow_domains=("example.com"),), callback='parse_url'),
]
def parse_url(self, response):
hxs = HtmlXPathSelector(response)
urls = hxs.select("//a/@href").extract()
print(set(urls)) # sanity check
また、CrawlSpiderでLxmlLinkExtractorを試しましたが、依然としてオフサイトリンクを取得しました。
これを行うにはどうすればよいですか?または問題を解決する私の方法は間違っていますか?
助けていただけたら幸いです!
別注: たびウェブサイトは、電子メールをスクラップして異なるだろう。だから、特定のHTMLセレクタやCSSセレクタを使用することはできません!
との完全な互換性を持っていない以前のバージョンと呼ばれているに注意してください!ありがとう! – Mohsin