PyPartPicker is a package that allows you to obtain information from PCPartPicker quickly and easily, with data being returned via objects with numerous attributes.
- Obtain Part objects, estimated wattage and total cost from PCPartPicker lists.
- Obtain name, product URL, price, product type, image and more from Part objects.
- Obtain everything previously mentioned + specs, reviews and in depth pricing information from PCPartPicker product links.
- Async ready: all scraping methods have an asynchronous version
Installation via pip:
>>> pip install pypartpicker
Or clone the repo directly:
>>> git clone https://github.com/thefakequake/pypartpicker.git
Here is a program that searches for i7's, prints every result, then gets the first result and prints its specs:
from pypartpicker import Scraper
# creates the scraper object
pcpp = Scraper()
# returns a list of Part objects we can iterate through
parts = pcpp.part_search("i7")
# iterates through every part object
for part in parts:
# prints the name of the part
print(part.name)
# gets the first product and fetches its URL
first_product_url = parts[0].url
# gets the Product object for the item
product = pcpp.fetch_product(first_product_url)
# prints the product's specs using the specs attribute
print(product.specs)
Here is another program that finds i3s that are cheaper than or equal to ÂŁ110, prints their specs and then prints the first review:
from pypartpicker import Scraper
from time import sleep
# returns a list of Part objects we can iterate through
# the region is set to "uk" so that we get prices in GBP
pcpp = Scraper()
parts = pcpp.part_search("i3", region="uk")
# iterates through the parts
for part in parts:
# checks if the price is lower than 110
if float(part.price.strip("ÂŁ")) <= 110:
print(f"I found a valid product: {part.name}")
print(f"Here is the link: {part.url}")
# gets the product object for the parts
product = pcpp.fetch_product(part.url)
print(product.specs)
# makes sure the product has reviews
if product.reviews != None:
# gets the first review
review = product.reviews[0]
print(f"Posted by {review.author}: {review.content}")
print(f"They rated this product {review.rating}/5.")
else:
print("There are no reviews on this product!")
# slows down the program so as not to spam PCPartPicker and potentially get IP banned
sleep(3)
-
headers ( dict ) - The browser headers for the requests in a dict.
Note: There are headers set by default. I only recommend changing them if you are encountering scraping errors.
-
response_retriever ( Callable ) - A function accepting arguments (
url, **kwargs
) that is called to retrieve the response from PCPartPickerNote: A default retriever is configured that calls pcpartpicker.com directly. I only recommend changing this if you need to configure how the request is made (e.g. via a proxy)
-
search_term ( str ) - The term you want to search for.
Example:
"i5"
-
limit (Optional[ int ]) - The amount of results that you want to be returned.
Example:
limit=5
-
region (Optional[ str ]) - The country code of which you want the pricing for the Part objects to be in.
Example:
region="uk"
A list of Part objects corresponding to the results on PCPartPicker.
-
product_url ( str ) - The product URL for the product you want to search for.
Example:
"https://pcpartpicker.com/product/9nm323/amd-ryzen-5-3600-36-thz-6-core-processor-100-100000031box"
A Product object for the part.
-
list_url ( str ) - The URL for the parts list.
Example:
"https://pcpartpicker.com/list/Tzx22V"
A PCPPList object for the list.
-
string ( str ) - The string containing the parts list URL.
Example:
"this function can extract the link from this string https://pcpartpicker.com/list/Tzx22V"
A list of URLs.
-
string ( str ) - The string containing the product URL.
Example:
"this function can extract the link from this string https://pcpartpicker.com/product/9nm323/amd-ryzen-5-3600-36-thz-6-core-processor-100-100000031box"
A list of URLs.
Same syntax as sync functions, but add aio_ to the beginning of the method name and add await before the function call.
pcpp = Scraper()
results = pcpp.part_search("i5")
becomes
pcpp = Scraper()
results = await pcpp.aio_part_search("i5")
Remember: you can only call async functions within other async functions. If you are not writing async code, do not use these methods. Use the sync methods, which don't have aio_ before their name.
Only the blocking functions (the ones that involve active scraping) have async equivalents.
name
- The name of the parturl
- The product URL for the parttype
- The type of the part (e.g. CPU, Motherboard, Memory)price
- The cheapest price for the partimage
- The image link for the part
- All attributes from Part
specs
- The specs for the product, arranged in a dictionary with the values being listsprice_list
- A list of Price objects containing all the merchants, prices and stock valuesrating
- The total user ratings and average score for the productreviews
- A list of Review objects for the productcompatible_parts
- A list of tuples containing the compatible parts links for the product
value
- The final price valuebase_value
- The price value before shipping and other discountsseller
- The name of the company selling the partseller_icon
- The icon URL for the company selling the parturl
- The URL which links to the seller's product listingin_stock
- A boolean of whether the product is in stock
author
- The name of the person who posted the reviewauthor_url
- The URL which points to the author's profileauthor_icon
- The icon URL of the person who posted the reviewpoints
- The amount of upvotes on the reviewcreated_at
- How long ago the review was sentrating
- The star rating out of 5 of the product that the review givescontent
- The text content of the review
parts
- List of Part objects corresponding to every part in the listwattage
- The estimated wattage for the parts in the listtotal
- The total price of the PCPartPicker listurl
- The URL of the PCPartPicker listcompatibility
- A list containing the compatibility notes for the parts list