ユーザーは全体の駅を取得し、私たちがすることができ理論は、我々は常に出発点として、ユーザーからの重畳ウォッチ・リストから、懸念のユーザーのリストを取るために登るする必要があります。
ただ、ユーザーの個人センターを開設
内部の緑の円は、当社が情報を収集したいものです。0ユーザーがこの人を心配しますか?そして、あなたはまた、ユーザーが他の人に注意を払う必要があり、エントリを探すために継続する必要があります。ほとんど価値の信者のトランペットや非アクティブなアカウントの数が多い、があるかもしれないので、あなたのウォッチリストを選択し、それは、データが有用であることができるようにすることです。
私は、3人に焦点を当てて、そのようなポータルページを選んだあなたはまた、いくつかのより多くを選択することができ、これはほとんど影響を持っています!https://juejin.im/user/55fa7cd460b2e36621f07dde/following
私たちは、このページから、ユーザーのIDをつかむためにすべきです
IDを取得した後、あなたは以下のリンクをスプライスすることができます
https://juejin.im/user/用户ID/following
爬虫類を書きます
まあ分析した後、あなたが作成できるscrapy
のプロジェクトを
items.py
我々が必要とするすべてのデータを定義するために使用されるファイルは、次のように持っていることに注意_id = scrapy.Field()
するためには、最初の良いはさておき設定mongdb
することができ、コメント欄を参照し、他の説明を準備します。
class JuejinItem(scrapy.Item):
_id = scrapy.Field()
username = scrapy.Field()
job = scrapy.Field()
company =scrapy.Field()
intro = scrapy.Field()
# 专栏
columns = scrapy.Field()
# 沸点
boiling = scrapy.Field()
# 分享
shares = scrapy.Field()
# 赞
praises = scrapy.Field()
#
books = scrapy.Field()
# 关注了
follow = scrapy.Field()
# 关注者
followers = scrapy.Field()
goods = scrapy.Field()
editer = scrapy.Field()
reads = scrapy.Field()
collections = scrapy.Field()
tags = scrapy.Field()
Python资源分享qun 784758214 ,内有安装包,PDF,学习视频,这里是Python学习者的聚集地,零基础,进阶,都欢迎
爬虫類正面玄関ファイルを書きます JuejinspiderSpider.py
import scrapy
from scrapy.selector import Selector
from Juejin.items import JuejinItem
class JuejinspiderSpider(scrapy.Spider):
name = 'JuejinSpider'
allowed_domains = ['juejin.im']
# 起始URL 5c0f372b5188255301746103
start_urls = ['https://juejin.im/user/55fa7cd460b2e36621f07dde/following']
def parse
この関数は、ロジックが複雑ではない、このプロセスは2つのトラフィックことができます
- リターンアイテム
- 要求リターンウォッチリスト
アイテム獲得は、我々はコードの量を簡単にするために、一致するXPathを使用する必要がある、私はと呼ばれる抽出法書いget_default
機能を。
def get_default(self,exts):
if len(exts)>0:
ret = exts[0]
else:
ret = 0
return ret
def parse(self, response):
#base_data = response.body_as_unicode()
select = Selector(response)
item = JuejinItem()
# 这个地方获取一下数据
item["username"] = select.xpath("//h1[@class='username']/text()").extract()[0]
position = select.xpath("//div[@class='position']/span/span/text()").extract()
if position:
job = position[0]
if len(position)>1:
company = position[1]
else:
company = ""
else:
job = company = ""
item["job"] = job
item["company"] = company
item["intro"] = self.get_default(select.xpath("//div[@class='intro']/span/text()").extract())
# 专栏
item["columns"] = self.get_default(select.xpath("//div[@class='header-content']/a[2]/div[2]/text()").extract())
# 沸点
item["boiling"] = self.get_default(select.xpath("//div[@class='header-content']/a[3]/div[2]/text()").extract())
# 分享
item["shares"] = self.get_default(select.xpath("//div[@class='header-content']/a[4]/div[2]/text()").extract())
# 赞
item["praises"] = self.get_default(select.xpath("//div[@class='header-content']/a[5]/div[2]/text()").extract())
#
item["books"] = self.get_default(select.xpath("//div[@class='header-content']/a[6]/div[2]/text()").extract())
# 关注了
item["follow"] = self.get_default(select.xpath("//div[@class='follow-block block shadow']/a[1]/div[2]/text()").extract())
# 关注者
item["followers"] = self.get_default(select.xpath("//div[@class='follow-block block shadow']/a[2]/div[2]/text()").extract())
right = select.xpath("//div[@class='stat-block block shadow']/div[2]/div").extract()
if len(right) == 3:
item["editer"] = self.get_default(select.xpath("//div[@class='stat-block block shadow']/div[2]/div[1]/span/text()").extract())
item["goods"] = self.get_default(select.xpath("//div[@class='stat-block block shadow']/div[2]/div[2]/span/span/text()").extract())
item["reads"] = self.get_default(select.xpath("//div[@class='stat-block block shadow']/div[2]/div[3]/span/span/text()").extract())
else:
item["editer"] = ""
item["goods"] = self.get_default(select.xpath("//div[@class='stat-block block shadow']/div[2]/div[1]/span/span/text()").extract())
item["reads"] = self.get_default(select.xpath("//div[@class='stat-block block shadow']/div[2]/div[2]/span/span/text()").extract())
item["collections"] = self.get_default(select.xpath("//div[@class='more-block block']/a[1]/div[2]/text()").extract())
item["tags"] = self.get_default(select.xpath("//div[@class='more-block block']/a[2]/div[2]/text()").extract())
yield item # 返回item
コードが正常に開くように、アイテムに戻されたsetting.py
ファイルのpipelines
ように、セットのデータを格納することができるかどうかをテストDEFAULT_REQUEST_HEADERS
リクエストパラメータ設定要求を。
setting.py
DEFAULT_REQUEST_HEADERS = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'en',
"Host": "juejin.im",
"Referer": "https://juejin.im/timeline?sort=weeklyHottest",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 浏览器UA"
}
ITEM_PIPELINES = {
'Juejin.pipelines.JuejinPipeline': 20,
}
この爬虫類のデータが保存されたmongodb
内部、あなたが必要なpipelines.py
コードに格納されたファイルを記述すること。
import time
import pymongo
DATABASE_IP = '127.0.0.1'
DATABASE_PORT = 27017
DATABASE_NAME = 'sun'
client = pymongo.MongoClient(DATABASE_IP,DATABASE_PORT)
db = client.sun
db.authenticate("dba", "dba")
collection = db.jujin # 准备插入数据
class JuejinPipeline(object):
def process_item(self, item, spider):
try:
collection.insert(item)
except Exception as e:
print(e.args)
あなたがコードを実行した後にエラーがない場合は、最後のステップは、クローラスパイダー完了した循環動作を改善するために、
list_li = select.xpath("//ul[@class='tag-list']/li") # 获取所有的关注
for li in list_li:
a_link = li.xpath(".//meta[@itemprop='url']/@content").extract()[0] # 获取URL
# 返回拼接好的数据请求
yield scrapy.Request(a_link+"/following",callback=self.parse)
Python资源分享qun 784758214 ,内有安装包,PDF,学习视频,这里是Python学习者的聚集地,零基础,进阶,都欢迎
すべてのコードはすでにそれを書かれています
フル・ストップ完全なユーザー爬虫類を書きます
拡張の方向
- 爬虫類にウォッチリストの最初のページのみをクロールするたびに、それはまた、サイクルは継続することができ、これはトラブルがありません
- では
setting.py
今度マルチスレッド操作 - 速度増加をクロール、複数の分散クローラを書くことを続けるの背後に、より高速のRedisを追加
- アイデアを拡張することができ、Nマルチサイトのユーザーの爬虫類は、我々はまた、いくつかのバックを書きました